#include<bits/stdc++.h>
using namespace std;
#define ll long long
// bool fun(vector<int>&a,vector<int>&b){
// if(a[0]!=b[0]) return a[0]<b[0];
// return a[1]>b[1];
// }
void solve(){
ll n,p;
cin>>n>>p;
vector<ll> a(n),b(n);
for(ll i=0;i<n;i++) cin>>a[i];
for(ll i=0;i<n;i++) cin>>b[i];
vector<vector<ll>> c(n+1);
for(ll i=0;i<n;i++) c[i]={b[i],a[i]};
c[n]={p,n-1};
sort(c.begin(),c.end());
if(c[0][0]>=p){
cout<<n*p<<"\n";
return;
}
ll ans=p;
priority_queue<vector<ll>,vector<vector<ll>>,greater<vector<ll>>> pq;
pq.push(c[0]);
int ind=1;
while(!pq.empty()){
vector<ll>temp=pq.top();
pq.pop();
int cnt=temp[1],cost=temp[0];
while(ind<n && cnt>0){
pq.push(c[ind]);
ind++;
ans+=cost;
cnt--;
}
if(ind>=n) break;
}
cout<<ans<<"\n";
}
int main(){
ll t;
cin>>t;
while(t--){
solve();
}
}
779. K-th Symbol in Grammar | 701. Insert into a Binary Search Tree |
429. N-ary Tree Level Order Traversal | 739. Daily Temperatures |
647. Palindromic Substrings | 583. Delete Operation for Two Strings |
518. Coin Change 2 | 516. Longest Palindromic Subsequence |
468. Validate IP Address | 450. Delete Node in a BST |
445. Add Two Numbers II | 442. Find All Duplicates in an Array |
437. Path Sum III | 436. Find Right Interval |
435. Non-overlapping Intervals | 406. Queue Reconstruction by Height |
380. Insert Delete GetRandom O(1) | 332. Reconstruct Itinerary |
368. Largest Divisible Subset | 377. Combination Sum IV |
322. Coin Change | 307. Range Sum Query - Mutable |
287. Find the Duplicate Number | 279. Perfect Squares |
275. H-Index II | 274. H-Index |
260. Single Number III | 240. Search a 2D Matrix II |
238. Product of Array Except Self | 229. Majority Element II |